[小ネタ] AWS CloudShellから有効リージョン全てのSecurity Hubに対する一括操作コマンドの覚え書き
たぬき( @tanuki_tzp )です。
AWS CLI を使用して、アカウントの有効リージョン全ての Security Hub に対する一括操作コマンドをこねこねすることがあったため、ブログとして残しておきます。
前提
操作したいアカウントの AWS CloudShell 上で実行するコマンドとなっています。
元ネタについて
川原さんの下記のブログの「2. 管理アカウントで Security Hub を有効化する」に記載されているコマンドが元ネタになります。
川原さんありがとうございます!
有効リージョンの Security Hub を一括有効するコマンド
上記ブログからの引用となります。
このコマンドを元に、いろいろ操作を変更していきます。
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "##### enable security hub in ${region}" aws --region ${region} securityhub enable-security-hub --enable-default-standards done
Security Hub を有効化する際、コンソール上で有効にする時にはセキュリティ基準を選択できるようになっているのですが、AWS CLI から有効化すると、
- AWS 基礎セキュリティのベストプラクティス v1.0.0
- CIS AWS Foundations Benchmark v1.2.0
の両方が有効になります。
そのため、CIS AWS Foundations Benchmark v1.2.0 を無効化したい場合は、再度一括無効化コマンドを打ってあげる必要があります。
各種コマンド
特定のセキュリティ基準(CIS AWS Foundations Benchmark v1.2.0)を一括無効化するコマンド
AWS AccountID には実行するアカウント ID を置き換えてください。
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "##### disabled standards rule in ${region}" aws --region ${region} securityhub batch-disable-standards --standards-subscription-arns "arn:aws:securityhub:${region}:1111222233334444(AWS AccountID):subscription/cis-aws-foundations-benchmark/v/1.2.0" done
特定のコントロールを一括無効化するコマンド
特定のリソースが Security Hub で検知されてしまうが、リスク容認している、もしくは、別途対策済みのため検知自体を止めたいこともあるかと思います。
サンプルとして AWS基礎セキュリティ v1.0.0 の ACM.1 を無効化の対象としています。
AWS Foundational Security Best Practices コントロール - AWS Security Hub
AWS AccountID とコントロールルールを適宜置き換えてください。
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "##### disabled control in ${region}" aws --region ${region} securityhub update-standards-control \ --standards-control-arn "arn:aws:securityhub:${region}:1111222233334444(AWS AccountID):control/aws-foundational-security-best-practices/v/1.0.0/ACM.1(無効化したいコントロールルール)" \ --control-status DISABLED \ --disabled-reason "無効化の理由" done
※特定のリージョンでコントロールを無効化するコマンドも一応載せておきます(リージョン: us-west-1)。
aws securityhub update-standards-control \ --standards-control-arn "arn:aws:securityhub:us-west-1:1111222233334444(AWS AccountID):control/aws-foundational-security-best-practices/v/1.0.0/ACM.1(無効化したいコントロールルール)" \ --control-status "DISABLED" \ --disabled-reason "無効化の理由"
特定のコントロールを一括有効化するコマンド
無効化したら有効化したくなるのが人間なので、やっぱり有効化したくなったときのコマンドがこちらです。
AWS AccountID とコントロールルールを適宜置き換えてください。
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "##### enabled control in ${region}" aws --region ${region} securityhub update-standards-control \ --standards-control-arn "arn:aws:securityhub:${region}:1111222233334444(AWS AccountID):control/aws-foundational-security-best-practices/v/1.0.0/ACM.1(有効化したいコントロールルール)" \ --control-status ENABLED done
まとめ
8 割書き終わったときに気づいたのですが、quiverさんの記事と内容が似通ってました。すみません。
AWS Security Hubのセキュリティ基準・コントロールをAWS CLIから有効・無効化してみた | DevelopersIO
複数のコントロールを一括で操作したい、同じ操作を複数のアカウントに対して実行したい等の場合は、上記のブログで紹介されているスプリクトを採用すると横展開とコントロールの管理がしやすいかと思われます。
1 アカウントのみサクッと実行したいよの時は本ブログも思い出していただければと思います。